/* 本代码给出了三种解法，实际上思路是一样的 */

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int count(char *line, char *key)
{
    int lenl, lenk, i, j, count = 0;
    lenl = strlen(line);
    lenk = strlen(key);
    for (i = 0; i < lenl; i++) { //判断line的第i个字符开始
        for (j = 0; j < lenk; j++) { //是否有连续lenk个字符与key相同
            if (line[i + j] != key[j])
                break;
        }
        if (j == lenk) { //如果有，说明匹配到了
            i += lenk - 1; //之所以要 -1 ，是因为后面还会有个 i++
            count++;
        }
    }
    return count;
}

/* 另一个更简洁的版本，使用的库函数strstr */
int count1(char *s, char *key)
{
    int c = 0, len = strlen(key);
    do {
        //想想为什么能这么用(NULL指针，以及逻辑与的短路)
        (s = strstr(s, key)) && (s += len, c++); 
    } while (s);
    return c;
}
/* 看不懂的话就去看main函数后面的那个count2函数, 思路一样 */

int count2(char str[], char t[]);

int main()
{
    int n, i;
    char keys[10][20], line[1010];

    scanf("%d", &n);
    for (i = 0; i < n; i++)
        scanf("%s", keys[i]);

    scanf("%s", line);

    for (i = 0; i < n; i++)
    {
        printf("%d\n", count2(line, keys[i]));
    }
    return 0;
}


//计算字符串的长度
int my_strlen(char str[])
{
    int i;
    for (i = 0; str[i] != '\0'; i++);
    return i;
}

//在str中查找字符t第一次出现的位置，若没找到则返回-1
int findchar(char str[], char t)
{
    int i;
    for (i = 0; str[i] != '\0'; i++)
        if (str[i] == t)
            return i;
    return -1;
}

//在str中查找字符串t第一次出现的位置，若没找到则返回-1
//类比findchar，差别在于那个if的判断条件需要配套一个循环
int findstr(char str[], char t[])
{
    int i, j, len = my_strlen(t);
    for (i = 0; str[i] != '\0'; i++)
    {
        for (j = 0; j < len; j++)
            if (str[i + j] != t[j])
                break;
        if (j == len)
            return i;
    }
    return -1;
}

//只把外层for循环的初始值改了
int findstr_offset(char str[], char t[], int offset)
{
    int i, j, len = my_strlen(t);
    for (i = offset; str[i] != '\0'; i++)
    {
        for (j = 0; j < len; j++)
            if (str[i + j] != t[j])
                break;
        if (j == len)
            return i;
    }
    return -1;
}

int count2(char str[], char t[])
{
    //从str的第0个字符开始查找
    int cnt = 0, offset = 0, len = my_strlen(t);
    while (1)
    {
        //下一次出现的位置
        offset = findstr_offset(str, t, offset);
        if (offset != -1)  //找到了
        {
            cnt++;
            offset += len; //跳过len个字符继续查找
        }
        else
            break; //没找到，结束
    }
    return cnt;
}
